接續上一篇,第二種改善R^2的經驗。
所謂的模型輸出的準確性,也可以這麼想:
如果輸出的結果是如預期,輸入的該資料剛好是模型可以解釋的部分。
如果輸出的結果是不如預期,輸入的該資料是模型無法解釋的部分。
那麼如果事先知道,哪些是模型無法解釋的資料並且去除,那麼模型解釋的能力是不是更好?
所以「假設」有部分的資料還是可以解釋的,那麼去除極端值,訓練出來的模型R^2應該有顯著的提升,如果完全沒有可以解釋的部分,那麼就還是會一樣爛。
幸運的是我們經由統計比較好的夥伴,做一些資料分佈的分析,發現我們資料還是有某一定的規律。
但有一些超過上界的資料,數值與其他的比較起來太過極端,可能對於模型訓練有嚴重影響,提出先把超過上界資料去除的想法,所以我們重新逐筆處理資料,一但發現答案欄的數值有超過上界的數值,該筆raw data直接先移除。
調整之後,根據該夥伴的說法,在他自己電腦訓練出來的的模型,R^2高達0.9以上。
我們將處理過後的資料重新丟到vertex建立新的autoML模型,R^2的結果大概是0.5左右。
雖然我們尚不清楚autoML內容是怎麼做,為什麼跟夥伴跑出來的模型R^2有一段差距,不過至少驗證了去除極端值,對於改善R^2有顯著的幫助。
如果去除明顯的的極端之後,仔細檢視資料距離中心點兩端的分佈狀況,還是有些偏差的狀態不盡人意呢?
本來現實中採集的資料,大部分時候就不會很漂亮,嘗試做一些資料上的轉換(transmation)
,有利於更多的狀況理解。
由於訂單金額是一個蠻大的數字,我們選擇開根號的做法。
開根號可以減少資料彼此間的距離,下面簡單舉個例子:
未經處理分數由小到大如下:
4 ,9, 11, 23, 45, 49, 71, 82, 91, 93
開根號之後如下:
2, 3, 3.3, 4,8, 6.7, 7, 8.4, 9, 9.5, 9.6
預測的落點在1~10,會相對1~100的狀況容易許多,而實際使用的時候則須將得出預估值乘以平方。
當然這個最後的結果會更加不精準,不過原本預期就是會有個誤差範圍的結果,在可以接受的誤差又何妨呢?
於是經過開根號處理的資料,模型訓練出來的R^2得到了0.6。
另外也可以選擇取對數(log)的方式做資料轉換。
我們回到Vertex在訓練新模型的步驟,「訓練選項」的進階設定,提供了3個選項:
根據我們前面「其他名詞解釋」說明的MAE和RMSLE,搭配這篇去除極端值影響的講解,應該可以理解兩者是相似的方式。
原始資料R^2用均方根誤差跑出的結果只有0.2左右,用了MAE會有0.3,用了RMSLE則到了0.4。
或許比起我們事先處理過資料再下去跑的狀況差了一點,但看來都是所有改善。
對於我們這種資料科學的新手團隊,或許vertex能夠幫助就到這邊了,如何改善模型R^2值以及抓出更好的參數,或做出更好的資料還是得靠我們自己。
不過我們還是給vertex高度的肯定,因為有這樣的工具,很大程度地保障了「訓練」、「部署」、「應用」這些重要的工作,讓我們需要專心對付的事情,範圍縮小了許多。